Bad Practice Example
class Note extends Model { /** * only Admins can store 'priority' * frontend shows the field 'priority' only when user is admin */ protected $fillable = ['note_text', 'priority']; } class StoreNoteRequest extends FormRequest { public function rules() { return ['note_text' = 'required']; } } class NoteController extends Controller { public function store(StoreNoteRequest $request) { Note::create($request->all()); return redirect()->route('notes.index'); } }
What To Do Instead
class Note extends Model { /** * only Admins can store 'priority' * frontend shows the field 'priority' only when user is admin */ protected $fillable = ['note_text', 'priority']; } class StoreNoteRequest extends FormRequest { public function rules() { return ['note_text' = 'required']; } } class NoteController extends Controller { public function store(StoreNoteRequest $request) { // Option 1: Note::create($request->only(['note_text'])); // Option 2: Note::create($request->except(['priority'])); // Option 3: Note::create($request->validated()); return redirect()->route('notes.index'); } }
عند إستخدام $request->all() فإنه يتم إستخدام جميع الـ parameters التي يتم إرسالها من الواجهة الأمامية frontend، فإذا توقع أحد هيكلية قاعدة البيانات فإنه يمكن عمل inject لبيانات لا يجب أن يتم إدخالها في قاعدة البيانات مما يتسبب في مشاكل تتعلق بالأمان، عوضا عنها يجب إستخدام $request->validated حيث يتم إدخال البيانات التي تم التحقق منها بإستخدام FormRequest.